home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 7: Sunsite / Linux Cubed Series 7 - Sunsite Vol 1.iso / system / printing / pnmtoprt.0 / pnmtoprt / pnmtoprt-2.0 / pnmtoprt.c < prev    next >
C/C++ Source or Header  |  1996-03-28  |  2KB  |  110 lines

  1. /*  Program: Printing PNM graphics format on a NEC P6
  2.  *  Author:  Helmut Riegler
  3.  *  EMail:   helmut.riegler@fast.co.at
  4.  */
  5.  
  6.  
  7. #include <stdio.h>
  8. #include <unistd.h>
  9.  
  10. #include "printers.h"
  11.  
  12. extern int optind;
  13. extern char *optarg;
  14.  
  15. #ifdef __STDC__
  16. static void exit_usage(char *s)
  17. #else
  18. static void exit_usage(s)
  19. char *s;
  20. #endif
  21. {
  22.   Driver_List *driver;
  23.  
  24.   fprintf(stderr, "usage: %s -d driver [-o opt] [-h] [PNM - file]\n", s);
  25.   fprintf(stderr, "       -h .. help\n");
  26.  
  27.   for(driver = driver_list; driver->driver_name; driver++) {
  28.     (*driver->driver)(NULL, NULL, 0, &driver->driver_name);
  29.   }
  30.  
  31.   exit(0);
  32. }
  33.  
  34. #ifdef __STDC__
  35. main(int argc, char *argv[])
  36. #else
  37. main(argc, argv)
  38. int argc;
  39. char *argv[];
  40. #endif
  41.  
  42. {
  43.   FILE *fd;
  44.   int opt;
  45.   char *driver_name = NULL;
  46.   Driver_List *driver;
  47.   int rc;
  48.  
  49.   /* reading arguments */
  50.   while((opt = getopt(argc, argv, "hd:o:")) != -1)
  51.     switch(opt) {
  52.     case 'h':
  53.       exit_usage(argv[0]);
  54.  
  55.     case 'd':
  56.       driver_name = optarg;
  57.       break;
  58.  
  59.     case 'o':
  60.       break;
  61.  
  62.     default:
  63.       fprintf(stderr, "%s: error in getopt\n", argv[0]);
  64.       exit_usage(argv[0]);
  65.     }
  66.  
  67.   /* if no remaining arguments -> using stdin */
  68.   if(optind == argc) {
  69.     fd = stdin;
  70.   } else {
  71.     if(!(fd = fopen(argv[optind], "r"))) {
  72.       fprintf(stderr, "%s: can't open '%s'\n", argv[0], argv[optind]);
  73.       exit(2);
  74.     }
  75.   }
  76.  
  77.   /* warning when too much arguments */
  78.   if(argc - optind > 1)
  79.     fprintf(stderr, "%s: Warning, arguments ignored\n", argv[0]);
  80.  
  81.   /* a driver must be specified */
  82.   if(!driver_name) {
  83.     fprintf(stderr, "%s: no driver specified\n", argv[0]);
  84.     exit_usage(argv[0]);
  85.   }
  86.  
  87.   /* searching the driver */
  88.   for(driver = driver_list;
  89.       driver->driver_name && strcmp(driver_name, driver->driver_name);
  90.       driver++);
  91.  
  92.   /* calling the driver */
  93.   if(driver->driver_name) {
  94.     if(rc = (*driver->driver)(fd, stdout, argc, argv)) {
  95.       fprintf(stderr, "%s: error calling driver: '%s'\n",
  96.           argv[0], driver_name);
  97.       exit(rc);
  98.     }
  99.   } else {
  100.    fprintf(stderr, "%s: no such driver: '%s'\n", argv[0], driver_name);
  101.    exit(3);
  102.   }
  103.  
  104.   /* closing input file */
  105.   if(fd != stdin)
  106.     fclose(fd);
  107.  
  108.   exit(0);
  109. }
  110.